#ifndef DATABASE_H
#define DATABASE_H

#include <mysql/mysql.h>
#include <string>
#include <memory>
#include <vector>
#include <mutex>

class Database {
public:
    Database(const std::string& host = "localhost",
             const std::string& user = "root",
             const std::string& password = "cmz050223@",
             const std::string& database = "student_course_system",
             int port = 3306);
    ~Database();

    bool connect();
    void disconnect();
    bool isConnected() const;

    // 执行SQL查询，返回结果
    std::unique_ptr<MYSQL_RES, decltype(&mysql_free_result)> query(const std::string& sql);

    // 执行SQL命令（INSERT, UPDATE, DELETE等）
    bool execute(const std::string& sql);

    // 转义字符串防止SQL注入
    std::string escapeString(const std::string& str);

private:
    std::string host_;
    std::string user_;
    std::string password_;
    std::string database_;
    int port_;
    MYSQL* conn_;
    std::mutex db_mutex_;  // 保护数据库连接的互斥锁
};

#endif // DATABASE_H
